// Vue
import Vue from 'vue'
import i18n from './i18n'
import App from './App'
//视频播放器
// import VueDPlayer from 'vue-dplayer'
// import 'vue-dplayer/dist/vue-dplayer.css'
// Vue.use(VueDPlayer);
// 核心插件
import d2Admin from '@/plugin/d2admin'
import util from '@/libs/util'
util.cookies.set('isPcDevice', window.innerWidth >= 992);
// store
import store from '@/store/index'


//参数序列化和解析库
import qs from 'qs';
Vue.prototype.$qs = qs //即可直接使用  this.$qs

// [ 可选组件 ]D2-Crud
import D2Crud from '@d2-projects/d2-crud'
// [ 可选组件 ] 图表
import VCharts from 'v-charts'
// [ 可选组件 ] 右键菜单
import contentmenu from 'v-contextmenu'
import 'v-contextmenu/dist/index.css'
// [ 可选组件 ] JSON 树状视图
// import vueJsonTreeView from 'vue-json-tree-view'
// [ 可选组件 ] UEditor
import VueUEditorWrap from 'vue-ueditor-wrap'
// [ 可选数据表 ] 数据表插件
import VXETable from 'vxe-table'
import 'vxe-table/lib/index.css'
// [vxe表格] 表格插件
import XEUtils from 'xe-utils'
import VXETablePluginElement from 'vxe-table-plugin-element'
import 'vxe-table-plugin-element/dist/style.css'

// [] 动态表单插件
// import DynamicForm from './components/dynamic-form'
// 数字输入指令
import OnlyNumber from './directive/only-number'

// 全局变量
import Global from './libs/global_variable'
//拖拽
import './libs/dialogDraggable' // 全局引入v-draggable自定义指令

// import ElAutocompleteItem from './views/so/select-item'
// import ImSelector from './components/imema/im-selector'

// 菜单和路由设置
import router from './router'

import _ from 'lodash'
console.log(19,process.env.VUE_APP_API)
Vue.prototype._ = _

// 使用mock数据
// require('./mock/index')

// 自定义全局的格式化处理函数
VXETable.formats.mixin({
	// 格式化性别
	formatSex({
		cellValue
	}) {
		return cellValue ? (cellValue === '1' ? '男' : '女') : ''
	},
	// 格式化下拉选项
	formatSelect({
		cellValue
	}, list) {
		console.warn('==========格式化下拉选项========');
		const item = list.find(item => item.value === cellValue)
		return item ? item.label : ''
	},
	// 格式化日期，默认 yyyy-MM-dd HH:mm:ss
	formatDate({
		cellValue
	}, format) {
		return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
	},
	// 四舍五入金额，每隔3位逗号分隔，默认2位数
	formatAmount({
		cellValue
	}, digits = 2) {
		return XEUtils.commafy(XEUtils.toNumber(cellValue), {
			digits
		})
	},
	// 格式化银行卡，默认每4位空格隔开
	formatBankcard({
		cellValue
	}) {
		return XEUtils.commafy(XEUtils.toValueString(cellValue), {
			spaceNumber: 4,
			separator: ' '
		})
	},
	// 四舍五入,默认两位数
	formatFixed({
		cellValue
	}, digits = 2) {
		return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
	},
	// 向下舍入,默认两位数
	formatCutNumber({
		cellValue
	}, digits = 2) {
		return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits)
	}
})

// 核心插件
Vue.use(d2Admin)

// 可选插件组件
Vue.use(D2Crud)
Vue.use(VCharts)
Vue.use(contentmenu)
// Vue.use(vueJsonTreeView)
VXETable.use(VXETablePluginElement)
Vue.use(VXETable)
// Vue.use(DynamicForm)
Vue.use(OnlyNumber)
// Vue.use()
// Vue.component('ElAutocompleteItem', ElAutocompleteItem)
// Vue.component('ImSelector', ImSelector)
Vue.component('VueUEditorWrap', VueUEditorWrap)

Vue.prototype.$g = Global
Vue.prototype.$XModal = VXETable.modal

new Vue({
	router,
	store,
	i18n,
	render: h => h(App),
	created() {
		/*
		// 处理路由 得到每一级的路由设置
		this.$store.commit('d2admin/page/init', frameInRoutes)
		// 设置顶栏菜单
		this.$store.commit('d2admin/menu/headerSet', menuHeader)
		// 初始化菜单搜索功能
		this.$store.commit('d2admin/search/init', menuHeader)
		*/
	},
	mounted() {
		// 展示系统信息
		this.$store.commit('d2admin/releases/versionShow');
		// 判断cookie里是否存有token作为验证是否登录的条件
		const token = util.cookies.get('Mema-Token');
		const hasToken = token && token !== 'undefined';
		if(hasToken){

			// 用户登录后从数据库加载一系列的设置
			this.$store.dispatch('d2admin/account/load');
		}
		// 获取并记录用户 UA
		this.$store.commit('d2admin/ua/get');
		// 初始化全屏监听
		this.$store.dispatch('d2admin/fullscreen/listen');
	},
	watch: {
		// 检测路由变化切换侧边栏内容
		'$route.matched': {
			handler(matched) {
				if (matched.length > 0) {
					const rootMenu = matched[0];
					if(rootMenu.path=='/login') return;
					console.log('main.js检测路由变化切换侧边栏内容');
					const pid = rootMenu.meta.menuId;
					const curPid = this.$store.getters.menu.curAsidePid
					console.log(rootMenu.meta);
					if (!pid || pid === curPid) return
					const menuList = this.$store.getters.menu.header || [];
					const _side = menuList.filter(menu => menu.id === pid);
					console.log({
						menu: _side.length > 0 ? _side[0].children : [],
						pid: pid
					});
					this.$store.commit('d2admin/menu/asideSet', {
						menu: _side.length > 0 ? _side[0].children : [],
						pid: pid
					})
				}
			},
			immediate: true
		}
	}
}).$mount('#app')